/* 
    定义全局接口，简化使用难度
*/
#pragma once
#include "logger.hpp"

namespace logging
{
    logger::s_ptr getLogger(std::string name) { return loggerManager::getInstance().getLogger(name); }
    logger::s_ptr rootLogger() { return loggerManager::getInstance().rootLogger(); }

    #define debug(fmt, ...) debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define info(fmt, ...) info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define warnning(fmt, ...) warnning(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define error(fmt, ...) error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define fatal(fmt, ...) fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

    // 下面的宏，用来简化，指定日志器的日志打印
    #define UNIQUE_DEBUG(logger_name, fmt, ...) logging::getLogger(logger_name)->debug(fmt, ##__VA_ARGS__)
    #define UNIQUE_INFO(logger_name, fmt, ...) logging::getLogger(logger_name)->info(fmt, ##__VA_ARGS__)
    #define UNIQUE_WARNNING(logger_name, fmt, ...) logging::getLogger(logger_name)->warnning(fmt, ##__VA_ARGS__)
    #define UNIQUE_ERROR(logger_name, fmt, ...) logging::getLogger(logger_name)->error(fmt, ##__VA_ARGS__)
    #define UNIQUE_FATAL(logger_name, fmt, ...) logging::getLogger(logger_name)->fatal(fmt, ##__VA_ARGS__)

    // 下面的宏，用来简化标准输出的日志打印
    #define DEBUG(fmt, ...) logging::rootLogger()->debug(fmt, ##__VA_ARGS__)
    #define INFO(fmt, ...) logging::rootLogger()->info(fmt, ##__VA_ARGS__)
    #define WARNNING(fmt, ...) logging::rootLogger()->warnning(fmt, ##__VA_ARGS__)
    #define ERROR(fmt, ...) logging::rootLogger()->error(fmt, ##__VA_ARGS__)
    #define FATAL(fmt, ...) logging::rootLogger()->fatal(fmt, ##__VA_ARGS__)
}